package com.tiancheng.trade.commom.web.model.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 调用支付中心下单数据
 *
 * @author kellen
 * @date 2024/3/16
 */
@Getter
@Setter
public class OrderPayDTO {

    // 用户ID
    @NotEmpty(message = "用户id不允许为空！")
    private String uid;
    // 用户手机号
    private String userTel;
    // 支付订单号
    @NotBlank(message = "支付订单号不允许为空！")
    private String paymentId;
    // 业务类型
    private String businessType;
    // 实收金额，单位分
    @NotNull(message = "订单实收金额不允许为空！")
    private Integer amount;
    // 应收金额，单位分、
    @NotNull(message = "订单金额不允许为空！")
    private Integer orderAmount;
    // 优惠金额
    private Integer discount;
    // 支付渠道
    @NotBlank(message = "支付渠道编码不允许为空！")
    private String payChannel;
    // 支付子渠道
    @NotBlank(message = "支付方式不允许为空！")
    private String payWay;
    // 订单名称
    @NotBlank(message = "订单名称不允许为空！")
    private String orderName;
    // 支付场景
    @NotBlank(message = "支付场景不允许为空！")
    private String payScene;
    // 微信公众号/小程序支付用户标识
    private String openid;
    // 移动端微信appid或微信公众号appid等的标识字段
    private String subAppId;
    // 主商户编号
    @NotBlank(message = "商户编码不允许为空！")
    private String merchantCode;
    // 主商户名称
    @NotBlank(message = "主商户名称不允许为空！")
    private String merchantName;
    // 微信优惠信息
    private String goodsTag;
    // 苹果支付成功返回凭证，验证的重要依据
    private String receiptData;
    //交易标识符,用于客户端先感知支付成功，后通知后端查询支付结果的场景
    private String transactionId;
    // 时间戳，精确到秒
    private Long ts;
    /**
     * 带券下单的参数
     */
    private String spInfo;
    /**
     * 透传字段
     */
    private String metadata;

    /**
     * 扫码支付的后置页面
     */
    private String endPage;
    /**
     * 支付成功跳转地址
     */
    private String returnUrl;
    /**
     * 运营商支付渠道id
     */
    @NotNull(message = "企业支付渠道id不允许为空")
    private Long orgPaymentChannelId;
    /**
     * 三方应用id
     */
    @NotBlank(message = "三方应用id不允许为空")
    private String clientId;
    /**
     * 业务编码
     */
    private String businessCode;
    /**
     * 机构编码
     */
    @NotNull(message = "机构编码不允许为空")
    private String organizationCode;
    /**
     * 支付过期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payExpiryTime;
    // 子订单列表
    @JsonProperty(value = "subOrders")
    @NotEmpty(message = "子订单不允许为空")
    private List<SubOrderPayDTO> subOrderPayDTOS;

    @Getter
    @Setter
    public static class SubOrderPayDTO {
        // 商户编码
        @NotBlank(message = "商户编码不允许为空！")
        private String merchantCode;
        // 商户名称
        @NotBlank(message = "商户名称不允许为空！")
        private String merchantName;
        // 产品编号
        @NotBlank(message = "产品编码不允许为空！")
        private String productCode;
        // 交易中台产品id
        private String productId;
        // 产品名称
        @NotBlank(message = "产品名称不允许为空！")
        private String productName;
        // 产品详细
        private String productDetail;
        // 数量
        private Integer productCount;
        // 子订单应付金额
        @NotNull(message = "子订单应收金额不允许为空！")
        private Integer orderAmount;
        // 子订单实付金额
        @NotNull(message = "子订单实收金额不允许为空！")
        private Integer amount;
        // 子订单编号
        @NotBlank(message = "子订单号不允许为空！")
        private String subOrderId;
        /**
         * 平台优惠金额
         */
        private Integer platformDiscount;
    }
}
